package main

import (
	"bytes"
	"fmt"
)

/*
										Go 语言数据类型
-------------------------------------------------------------------------------------------
1.数据类型
在 Go 编程语言中，数据类型用于声明函数和变量。

数据类型的出现是为了把数据分成所需内存大小不同的数据，编程的时候需要用大数据的时候才需要申请大内存，就可以充分利用内存。

Go 语言按类别有以下几种数据类型：
序号			类型				描述
1			布尔型  			布尔型的值只可以是常量 true 或者 false。一个简单的例子：var b bool = true。
2			数字类型			整型 int 和浮点型 float32、float64，Go 语言支持整型和浮点型数字，并且支持复数，其中位的运算采用补码。
3			字符串类型		字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4			派生类型			包括：
								(a) 指针类型（Pointer）
								(b) 数组类型
								(c) 结构化类型(struct)
								(d) Channel 类型
								(e) 函数类型
								(f) 切片类型
								(g) 接口类型（interface）
								(h) Map 类型
-------------------------------------------------------------------------------------------
2.数字类型
Go 也有基于架构的类型，例如：int、uint 和 uintptr。

序号				类型					描述
1				uint8				无符号 8 位整型 (0 到 255)
2				uint16				无符号 16 位整型 (0 到 65535)
3				uint32				无符号 32 位整型 (0 到 4294967295)
4				uint64				无符号 64 位整型 (0 到 18446744073709551615)
5				int8				有符号 8 位整型 (-128 到 127)
6				int16				有符号 16 位整型 (-32768 到 32767)
7				int32				有符号 32 位整型 (-2147483648 到 2147483647)
8				int64				有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

-------------------------------------------------------------------------------------------
3.浮点型

序号				类型					描述
1				float32				IEEE-754 32位浮点型数
2				float64				IEEE-754 64位浮点型数
3				complex64			32 位实数和虚数
4				complex128			64 位实数和虚数
-------------------------------------------------------------------------------------------
4.其他数字类型
序号				类型					描述
1				byte				类似 uint8 ,代表了 ASCII 码的一个字符。
2				rune				类似 int32 ,代表一个 UTF-8 字符，当需要处理中文、日文或者其他复合字符时，则需要用到 rune 类型。rune 类型等价于 int32 类型。
3				uint				32 或 64 位
4				int					与 uint 一样大小
5				uintptr				无符号整型，用于存放一个指针
-------------------------------------------------------------------------------------------
5.类型转换
类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go 语言类型转换基本格式如下：

type_name(expression)
type_name 为类型，expression 为表达式。
go不支持隐式转换类型：
	var a int64 = 3
    var b int32
    b = a //报错

6.格式化打印
格式化打印占位符：
%v,原样输出
%T，打印类型
%t,bool类型
%s，字符串
%f，浮点
%d，10进制的整数
%b，2进制的整数
%o，8进制
%x：16进制 0-9，a-f
%X：16进制 0-9，A-F
%c，打印字符
%p，打印地址

在go语言中，值类型和引用类型有以下特点：
a、值类型：基本数据类型，int,float,bool,string,以及数组和struct
特点：变量直接存储值，内存通常在栈中分配，栈在函数调用完会被释放

b、引用类型：指针，slice，map，chan等都是引用类型
特点：变量存储的是一个地址，这个地址存储最终的值。内存通常在堆上分配，通过GC回收。

*/

// 10进制转16进制
func dTox() {
	m := [16]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}
	var buf bytes.Buffer
	var x int32 = 213
	for ; x > 0; x /= 16 {
		buf.WriteByte(m[x%16])
	}
	fmt.Println(reverse(buf.String())) //D5
}

func main2() {

	var sum int = 17
	var count int = 5
	var mean float32

	mean = float32(sum) / float32(count)
	fmt.Printf("mean 的值为: %f\n", mean)

	var x int32 = 0x39_A7_F8 //      1110011010100111111000
	fmt.Printf("%b\n", x)    //1110011010011111111000

	var y int32 = 0b1100_1001_0111_1011 //oxC9_7B
	fmt.Printf("%X", y)                 //C97B
}
